package com.personal.portal.admin.entity;

import com.mybatisflex.annotation.Column;
import com.mybatisflex.annotation.Table;
import com.personal.portal.common.entity.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.time.LocalDate;
import java.time.LocalDateTime;

/**
 * 用户表实体类（数据库使用tp_users表）
 * 用于存储用户个人信息和登录凭据
 *
 * @author zhanghui
 * @version 2.0.0
 * @since 2025-11-13
 */
@Data
@EqualsAndHashCode(callSuper = true)
@Table("tp_users")
public class User extends BaseEntity {

    /**
     * 用户名（登录账号）
     */
    @Column("username")
    private String username;

    /**
     * 密码（加密存储）
     */
    @Column("password")
    private String password;

    /**
     * 密码盐值
     */
    @Column("password_salt")
    private String passwordSalt;

    /**
     * 姓名（真实姓名）
     */
    @Column("name")
    private String name;

    /**
     * 昵称（显示名称）
     */
    @Column("nickname")
    private String nickname;

    /**
     * 职位
     */
    @Column("position")
    private String position;

    /**
     * 邮箱
     */
    @Column("email")
    private String email;

    /**
     * 电话号码
     */
    @Column("phone")
    private String phone;

    /**
     * 所在城市
     */
    @Column("city")
    private String city;

    /**
     * 工作年限，例如：5年
     */
    @Column("work_years")
    private String workYears;

    /**
     * 个人简介
     */
    @Column("bio")
    private String bio;

    /**
     * 头像链接
     */
    @Column("avatar_url")
    private String avatarUrl;

    /**
     * 出生日期
     */
    @Column("birthday")
    private LocalDate birthday;

    /**
     * 个人网站
     */
    @Column("website")
    private String website;

    /**
     * GitHub链接
     */
    @Column("github_url")
    private String githubUrl;

    /**
     * LinkedIn链接
     */
    @Column("linkedin_url")
    private String linkedinUrl;

    /**
     * 博客链接
     */
    @Column("blog_url")
    private String blogUrl;

    /**
     * 简历文件链接
     */
    @Column("resume_url")
    private String resumeUrl;

    /**
     * 用户类型：admin-管理员 user-普通用户
     */
    @Column("user_type")
    private String userType;

    /**
     * 是否激活：0-未激活 1-已激活
     */
    @Column("is_active")
    private Integer isActive;

    /**
     * 是否锁定：0-未锁定 1-已锁定
     */
    @Column("is_locked")
    private Integer isLocked;

    /**
     * 是否公开显示（0-不显示，1-显示）
     */
    @Column("is_public")
    private Integer isPublic;

    /**
     * 排序权重
     */
    @Column("sort_order")
    private Integer sortOrder;

    /**
     * 最后登录时间
     */
    @Column("last_login_time")
    private LocalDateTime lastLoginTime;

    /**
     * 登录次数
     */
    @Column("login_count")
    private Integer loginCount;

    /**
     * 密码更新时间
     */
    @Column("password_update_time")
    private LocalDateTime passwordUpdateTime;

    /**
     * 密码过期时间
     */
    @Column("password_expire_time")
    private LocalDateTime passwordExpireTime;

    /**
     * 重置密码令牌
     */
    @Column("reset_token")
    private String resetToken;

    /**
     * 重置令牌过期时间
     */
    @Column("reset_token_expire")
    private LocalDateTime resetTokenExpire;
}
